package com.shlh.saas.mapper.canton.exhibitor;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.shlh.saas.entity.canton.exhibitor.BaseCantonFairExhibitor;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * 广交会展商数据库接口
 */
@Mapper
public interface CantonFairExhibitorMapper extends BaseMapper<BaseCantonFairExhibitor> {
    
    /**
     * 获取所有广交会展商数据
     * @param tableName 表名
     * @return 展商列表
     */
    List<BaseCantonFairExhibitor> getAllCantonFairExhibitors(@Param("tableName") String tableName);
    
    /**
     * 根据条件搜索广交会展商数据
     * @param tableName 表名
     * @param companyName 公司名称
     * @param province 省份
     * @param city 城市
     * @param mainProducts 主要产品
     * @param establishmentYear 成立年份
     * @param companyScale 公司规模
     * @param enterpriseType 企业类型
     * @param enterpriseNature 企业性质
     * @param tradeForm 贸易形式
     * @return 展商列表
     */
    List<BaseCantonFairExhibitor> searchCantonFairExhibitors(
            @Param("tableName") String tableName,
            @Param("companyName") String companyName,
            @Param("province") String province,
            @Param("city") String city,
            @Param("mainProducts") String mainProducts,
            @Param("establishmentYear") String establishmentYear,
            @Param("companyScale") String companyScale,
            @Param("enterpriseType") String enterpriseType,
            @Param("enterpriseNature") String enterpriseNature,
            @Param("tradeForm") String tradeForm
    );
    
    /**
     * 在所有字段中搜索关键词（带分页）
     * @param tableName 表名
     * @param keyword 关键词
     * @param offset 偏移量
     * @param limit 限制数
     * @return 展商列表
     */
    List<BaseCantonFairExhibitor> searchInAllFieldsWithPagination(
            @Param("tableName") String tableName,
            @Param("keyword") String keyword,
            @Param("offset") int offset,
            @Param("limit") int limit
    );
    
    /**
     * 统计在所有字段中包含关键词的记录总数
     * @param tableName 表名
     * @param keyword 关键词
     * @return 记录总数
     */
    long countInAllFields(
            @Param("tableName") String tableName,
            @Param("keyword") String keyword
    );
    
    /**
     * 查询所有数据（带分页）
     * @param tableName 表名
     * @param offset 偏移量
     * @param limit 限制数
     * @return 展商列表
     */
    List<BaseCantonFairExhibitor> selectAllWithPagination(
            @Param("tableName") String tableName,
            @Param("offset") int offset,
            @Param("limit") int limit
    );
    
    /**
     * 统计总记录数
     * @param tableName 表名
     * @return 记录总数
     */
    long countAll(@Param("tableName") String tableName);
    
    /**
     * 查找相似的展商名称
     * @param tableName 表名
     * @param keyword 关键词
     * @return 展商名称列表
     */
    List<String> findSimilarCompanyNames(
            @Param("tableName") String tableName,
            @Param("keyword") String keyword
    );
    
    /**
     * 查找相似的主营产品
     * @param tableName 表名
     * @param keyword 关键词
     * @return 主营产品列表
     */
    List<String> findSimilarMainProducts(
            @Param("tableName") String tableName,
            @Param("keyword") String keyword
    );
    
    /**
     * 通过关键词搜索具有电子邮箱的展商
     * 注意：由于展商表中没有email列，此方法返回空结果
     * 
     * @param keyword 搜索关键词
     * @param offset 偏移量
     * @param limit 限制数量
     * @return 符合条件的展商列表
     */
    @Select("SELECT id, company_name FROM canton_fair_exhibitors WHERE 1=0")
    List<BaseCantonFairExhibitor> searchExhibitorsWithEmail(@Param("keyword") String keyword, 
                                                         @Param("offset") int offset, 
                                                         @Param("limit") int limit);
    
    /**
     * 统计通过关键词搜索具有电子邮箱的展商数量
     * 注意：由于展商表中没有email列，此方法返回0
     * 
     * @param keyword 搜索关键词
     * @return 符合条件的展商数量
     */
    @Select("SELECT 0")
    long countExhibitorsWithEmail(@Param("keyword") String keyword);
    
    /**
     * 通过关键词搜索具有电话的展商
     * 注意：由于展商表中没有phone列，此方法返回空结果
     * 
     * @param keyword 搜索关键词
     * @param offset 偏移量
     * @param limit 限制数量
     * @return 符合条件的展商列表
     */
    @Select("SELECT id, company_name FROM canton_fair_exhibitors WHERE 1=0")
    List<BaseCantonFairExhibitor> searchExhibitorsWithPhone(@Param("keyword") String keyword, 
                                                         @Param("offset") int offset, 
                                                         @Param("limit") int limit);
    
    /**
     * 统计通过关键词搜索具有电话的展商数量
     * 注意：由于展商表中没有phone列，此方法返回0
     * 
     * @param keyword 搜索关键词
     * @return 符合条件的展商数量
     */
    @Select("SELECT 0")
    long countExhibitorsWithPhone(@Param("keyword") String keyword);
    
    /**
     * 根据邮箱精确查询广交会展商
     * 注意：由于展商表中没有email列，此方法返回空结果
     * 
     * @param email 邮箱地址
     * @return 匹配的广交会展商列表
     */
    @Select("SELECT id, company_name, company_profile, company_type, company_scale, contact_person, category, phone, mobile, website, contact_address AS address, email, fax, postal_code, province_city AS province, booth_number, " +
            " main_products, establishment_year, recent_exhibition_history, registered_capital, `session` FROM canton_fair_exhibitors WHERE email = #{email} LIMIT 10")
    List<BaseCantonFairExhibitor> findByEmail(@Param("email") String email);

    @Select("SELECT id, company_name, company_profile, company_type, company_scale, contact_person, category, phone, mobile, website, contact_address AS address, email, fax, postal_code, province_city AS province, booth_number, " +
            " main_products, establishment_year, recent_exhibition_history, registered_capital, `session` FROM canton_fair_exhibitors WHERE phone = #{phone} LIMIT 10")
    List<BaseCantonFairExhibitor> findByPhone(@Param("phone") String phone);


    /**
     * 批量搜索：带手机号的展商数据
     * SQL定义在CantonFairExhibitorMapper.xml中
     */
    List<BaseCantonFairExhibitor> searchExhibitorDataWithPhone(@Param("companyName") String companyName, @Param("fullName") String fullName, @Param("website") String website);

    /**
     * 批量搜索：带邮箱的展商数据
     * SQL定义在CantonFairExhibitorMapper.xml中
     */
    List<BaseCantonFairExhibitor> searchExhibitorDataWithEmail(@Param("companyName") String companyName, @Param("fullName") String fullName, @Param("website") String website);

    List<BaseCantonFairExhibitor> searchExhibitorsByEmail(@Param("email") String email,
                                                          @Param("offset") int offset,
                                                          @Param("limit") int limit);

    List<BaseCantonFairExhibitor> searchExhibitorsByPhone(@Param("phone") String phone,
                                                          @Param("offset") int offset,
                                                          @Param("limit") int limit);


}